iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0

有的時候我們的套件模組供別人使用的時候,
需要使用這個套件的目標定義特定的函式,不僅可以統一特定類型的 api
也可以確定使用這個 Behaviour 模組的模組有實現需要的 Callback 函式

這邊舉一個方便說明的 Behaviour 與實際使用這個 Behaviour 的範例
(note: Elixir 的 Behaviour 是英式拼法,不是美式的 Behavior)

制定一個有 Behaviour 的模組
因為是要求使用者定義一個函式,所以參數的型別與函式回覆的型別都需要特別指定
(型別寫法會在後面說明,這邊先知道 user 必須要是字串, message 也是字串,且預期這個函式會回覆 :ok atom)

defmodule NoticeChannel do
  @callback send_message(user :: String.t(), message :: String.t()) :: :ok
end
defmodule Line do
  @behaviour NoticeChannel

  def send_message(user, message) do
    IO.puts("Sending line message to #{user}: #{message}")
  end
end

這麼一來,假如系統有很多個傳送訊息的模組,只有使用同個 @bahaviour 都可以有統一的 api


上一篇
看似語法其實只是呼叫函式的語法糖
下一篇
Meta-programming 1
系列文
通勤看手機就可讀懂的 Elixir 語言入門教學24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言